package Application; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.util.Date; import java.util.Scanner; public class Simulate implements Runnable { public static final int nrOfCheckouts=3; private int runTime=20; private int maxProcessingTime=12; private int minProcessingTime=3; private Checkout[] queue = new Checkout[nrOfCheckouts]; Thread[] thread = new Thread[3]; Date date = new Date(); public Simulate(){ fileWrite("\n\n"); fileWrite(date.toString()); fileWrite("\n\n"); Scanner input = new Scanner(System.in); System.out.print("Enter the total running time: "); runTime=input.nextInt(); System.out.print("Enter the minimum processing time: "); minProcessingTime=input.nextInt(); System.out.print("Enter the maximum processing time: "); maxProcessingTime=input.nextInt(); input.close(); for(int i=0;i<nrOfCheckouts;i++){ queue[i] = new Checkout(i); thread[i] = new Thread(queue[i]); thread[i].start(); } } public int leastPopulatedQueue(){ int min=999; int index=0; int[] a=new int[nrOfCheckouts]; for(int i=0;i<nrOfCheckouts;i++){ a[i]=queue[i].getQueueSize(); } for(int i=0;i<nrOfCheckouts;i++){ if(min>a[i]){ min=a[i]; index=i; } } return index; } public void fileWrite(String s){ try(FileWriter fw = new FileWriter("log.txt", true); BufferedWriter bw = new BufferedWriter(fw); PrintWriter out = new PrintWriter(bw)) { out.println(s); } catch (IOException e) { //exception handling left as an exercise for the reader } } public int randomProcessingTime(){ return (minProcessingTime+(int)(Math.random()*(maxProcessingTime-minProcessingTime))); } @Override public void run() { int currentTime = 0; while(currentTime<runTime){ Client c = new Client(currentTime,currentTime,randomProcessingTime()); queue[leastPopulatedQueue()].addClient(c); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } currentTime++; } for(int i=0;i<nrOfCheckouts;i++){ queue[i].computeAverageTime(); } System.exit(0); } }